package dhy.com.config;



import dhy.com.config.serializer.Serializer;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * <p>
 *     配置类,用来配置属性类
 * </p>
 * @author zdh
 */
public abstract class Config {
    /**
     * 配置对象
     */
    static Properties properties;

    /**
     * <p>
     *    启动加载配置文件
     *    知识:
     *    xxx.class.getResourceAsStream("")--->以/开头,去类路径下找资源,否则去当前包下找资源
     *    xxx.class.getClassLoader().getResourceAsStream("")--->只会去类路径下找资源
     * </p>
     */
    static {
        try (InputStream in = Config.class.getResourceAsStream("/dhyRpc.properties")) {
            properties = new Properties();
            properties.load(in);
        } catch (IOException e) {
            throw new ExceptionInInitializerError(e);
        }
    }


    /**
     * <P>
     *     读取配置文件中的端口信息,并返回
     *     默认端口:5210
     * </P>
     * @return
     */
    public static int getServerPort() {
        String value = properties.getProperty("dhy.rpcServer.port");
        if(value == null) {
            return 5210;
        } else {
            return Integer.parseInt(value);
        }
    }


    /**
     * <p>
     *     读取配置文件中序列化方式的配置
     *     默认: JDK序列化方式
     *     只支持: JDK,JSON
     * </p>
     * @return
     */
    public static Serializer.Algorithm getSerializerAlgorithm() {
        String value = properties.getProperty("dhy.rpcServer.serializer.algorithm");
        if(value == null) {
            //默认jdk序列化
            return Serializer.Algorithm.Java;
        } else {
            return Serializer.Algorithm.valueOf(value);
        }
    }

    /**
     * <p>
     *     返回配置文件中定义的属性,有则返回，没有返回null
     * </p>
     */
    public static String getProperty(String key)
    {
        return properties.getProperty(key);
    }
}